﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using FastDATA;

namespace CursoUNICEUB
{
    public partial class Downloads : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                carregaTutoriais();
                carregarAssunto();
                carregaTipo();
            }
        }

        private void carregaTutoriais()
        {
            try
            {
                using (DCCursoDataContext banco = new DCCursoDataContext())
                {
                    var q = from e in banco.DETutorials
                            where e.Ativo
                            orderby e.Data descending
                            select e;

                    this.rptDownload.DataSource = q.ToList();
                    this.rptDownload.DataBind();
                }
            }
            catch (Exception)
            {
                Util.showMessage(this, "Houve um erro no momento de carregar os tutoriais");
            }
        }

        private void download(string url)
        {
            FileInfo arquivo = new FileInfo(Server.MapPath(url));

            //Limpa o conteúdo de saída atual do buffer
            Response.Clear();
            //Adiciona um cabeçalho que especifica o nome default para a caixa de diálogos Salvar Como...
            Response.ContentType = "application/octet-stream";
            Response.AddHeader("Content-Disposition", "attachment; filename=\"" + arquivo.Name + "\"");
            //Adiciona ao cabeçalho o tamanho do arquivo para que o browser possa exibir o progresso do download
            Response.AddHeader("Content-Length", arquivo.Length.ToString());

            Response.Flush();

            Response.WriteFile(arquivo.FullName);
        }

        protected void Download_Click(object sender, EventArgs e)
        {
            if (Session["aluno"] != null)
            {
                try
                {
                    ImageButton btn = sender as ImageButton;

                    this.download(btn.CommandArgument);
                }
                catch (Exception)
                {
                    Util.showMessage(this, "Houve um erro ao tentar fazer o download. Por favor entre em contato : contato@cursodotnet.com.br");
                }
            }
            else
                Util.showMessage(this, "Apenas alunos podem realizar o download dos arquivos");
        }

        protected void btnPesquisar_Click(object sender, EventArgs e)
        {
            try
            {
                List<DETutorial> tutoriais = new List<DETutorial>();
                using (DCCursoDataContext banco = new DCCursoDataContext())
                {
                    var q = from t in banco.DETutorials
                            where t.Ativo &&
                                  (this.ddlAssunto.SelectedValue == "0" || t.CodigoAssunto.Equals(this.ddlAssunto.SelectedValue)) &&
                                  (this.ddlTipo.SelectedValue == "0" || t.CodigoTipoTutorial.Equals(this.ddlTipo.SelectedValue)) &&
                                  (String.IsNullOrEmpty(this.txtBusca.Text) || t.Titulo.Contains(this.txtBusca.Text) || t.Descricao.Contains(this.txtBusca.Text))
                            orderby t.Data descending
                            select t;

                    tutoriais = q.ToList();

                    this.rptDownload.DataSource = tutoriais;
                    this.rptDownload.DataBind();
                }

                if (tutoriais.Count == 0)
                    Util.showMessage(this, "Não foi encontrado nenhum tutorial");
                    
            }
            catch (Exception)
            {
                Util.showMessage(this, "Houve um erro ao pesquisar os tutoriais. Por favor entre em contato : contato@cursodotnet.com.br");
            }
        }

        void carregarAssunto()
        {
            try
            {
                List<DEAssunto> assuntos = null;
                using (DCCursoDataContext banco = new DCCursoDataContext())
                {
                    var q = from e in banco.DEAssuntos
                            select e;

                    assuntos = q.ToList();
                }
                assuntos.Insert(0, (new DEAssunto() { Codigo = 0, Descricao = "Todos" }));
                this.ddlAssunto.DataSource = assuntos;
                this.ddlAssunto.DataBind();
            }
            catch (Exception)
            {
                Util.showMessage(this, "Erro ao carregar os assuntos. Tente mais tarde ou ligue para 8592-4439");
            }
        }

        void carregaTipo()
        {
            try
            {
                List<DETipoTutorial> tipos = null;
                using (DCCursoDataContext banco = new DCCursoDataContext())
                {
                    var q = from e in banco.DETipoTutorials
                            select e;

                    tipos = q.ToList();
                }

                tipos.Insert(0, (new DETipoTutorial() { Codigo = 0, Descricao = "Todos" }));
                this.ddlTipo.DataSource = tipos;
                this.ddlTipo.DataBind();
            }
            catch (Exception)
            {
                Util.showMessage(this, "Erro ao carregar os tipos. Tente mais tarde ou ligue para 8592-4439");
            }
        }
    }
}